from goods.models import GoodsChannel


# TODO: 用来构造主页静态化用于渲染三级分类导航的模版参数
def get_categories():
    categories = {}      # 商品分类频道

    # 按照组id排序，再按照sequence排序
    channels = GoodsChannel.objects.order_by(
        'group_id',
        'sequence'
    )

    # 遍历每一个频道。把频道插入以"组id"为键的键值对中
    for channel in channels:
        # channel是当前分组的关联的一个频道对象
        if channel.group_id not in categories:
            # if判断，成立，表示当前组不存在第一次添加当前分组频道
            categories[channel.group_id] = {
                'channels': [],     # 一级分类信息，当前分组的频道信息
                'sub_cats': [],     # 二级分类，关联的二级分类
            }
        # 一级分类信息
        cat1 = channel.category     # 获取当前频道关联的一级分类对象
        # 补充当前分组的频道信息
        categories[channel.group_id]['channels'].append({
            'id': cat1.id,
            'name': cat1.name,
            'url': channel.url
        })

        # 二级分类信息
        cat2s = cat1.subs.all()
        for cat2 in cat2s:  # cat2：每一个二级分类对象
            # 当前二级分类关联的三级分类
            cat3s_list = []
            # 补充商品三级分类信息
            cat3s = cat2.subs.all()
            for cat3 in cat3s:
                # cat3：当前二级分类关联的每一个三级分类对象
                cat3s_list.append({
                    'id': cat3.id,
                    'name': cat3.name
                })

            categories[channel.group_id]['sub_cats'].append({
                'id': cat2.id,
                'name': cat2.name,
                'sub_cats': cat3s_list  # 三级分类信息
            })

    return categories
